#Boa:Dialog:ABMProductos

import wx
import wx.grid
import consultasBD
import utiles
from decimal import Decimal
import sincronizar_tabla

def create(parent):
    return ABMProductos(parent)

[wxID_ABMPRODUCTOS, wxID_ABMPRODUCTOSBUTTON1, wxID_ABMPRODUCTOSBUTTON2, 
 wxID_ABMPRODUCTOSBUTTON3, wxID_ABMPRODUCTOSBUTTON4, wxID_ABMPRODUCTOSBUTTON5, 
 wxID_ABMPRODUCTOSCOMBOBOX1, wxID_ABMPRODUCTOSCOMBOBOX2, 
 wxID_ABMPRODUCTOSCOMBOBOX3, wxID_ABMPRODUCTOSCOMBOBOX4, 
 wxID_ABMPRODUCTOSSTATICTEXT1, wxID_ABMPRODUCTOSSTATICTEXT10, 
 wxID_ABMPRODUCTOSSTATICTEXT2, wxID_ABMPRODUCTOSSTATICTEXT3, 
 wxID_ABMPRODUCTOSSTATICTEXT4, wxID_ABMPRODUCTOSSTATICTEXT5, 
 wxID_ABMPRODUCTOSSTATICTEXT6, wxID_ABMPRODUCTOSSTATICTEXT7, 
 wxID_ABMPRODUCTOSSTATICTEXT8, wxID_ABMPRODUCTOSSTATICTEXT9, 
 wxID_ABMPRODUCTOSTEXTCTRL1, wxID_ABMPRODUCTOSTEXTCTRL2, 
 wxID_ABMPRODUCTOSTEXTCTRL3, wxID_ABMPRODUCTOSTEXTCTRL4, 
 wxID_ABMPRODUCTOSTEXTCTRL5, wxID_ABMPRODUCTOSTEXTCTRL6, 
 wxID_ABMPRODUCTOSTEXTCTRL7, 
] = [wx.NewId() for _init_ctrls in range(27)]

class ABMProductos(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_ABMPRODUCTOS, name='ABMProductos',
              parent=prnt, pos=wx.Point(388, 251), size=wx.Size(526, 297),
              style=wx.DEFAULT_DIALOG_STYLE, title='Modificar Producto')
        self.SetClientSize(wx.Size(518, 270))

        self.textCtrl1 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL1,
              name='textCtrl1', parent=self, pos=wx.Point(16, 32),
              size=wx.Size(64, 21), style=0, value='')
        self.textCtrl1.Enable(True)
        self.textCtrl1.SetEditable(True)

        self.button2 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON2, label='Buscar',
              name='button2', parent=self, pos=wx.Point(88, 32),
              size=wx.Size(75, 23), style=0)
        self.button2.Enable(True)
        self.button2.Bind(wx.EVT_BUTTON, self.OnBuscar,
              id=wxID_ABMPRODUCTOSBUTTON2)

        self.textCtrl2 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL2,
              name='textCtrl2', parent=self, pos=wx.Point(168, 32),
              size=wx.Size(64, 21), style=0, value='')
        self.textCtrl2.SetEditable(True)
        self.textCtrl2.Enable(False)

        self.textCtrl3 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL3,
              name='textCtrl3', parent=self, pos=wx.Point(232, 32),
              size=wx.Size(200, 21), style=0, value='')
        self.textCtrl3.Enable(False)

        self.button1 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON1, label='Proveedor',
              name='button1', parent=self, pos=wx.Point(440, 32),
              size=wx.Size(64, 23), style=0)
        self.button1.Enable(False)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscarProveedor,
              id=wxID_ABMPRODUCTOSBUTTON1)

        self.textCtrl4 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL4,
              name='textCtrl4', parent=self, pos=wx.Point(16, 88),
              size=wx.Size(304, 21), style=0, value='')
        self.textCtrl4.Enable(False)
        self.textCtrl4.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)

        self.staticText1 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT1,
              label='Proveedor', name='staticText1', parent=self,
              pos=wx.Point(168, 16), size=wx.Size(50, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT4,
              label='CodSussan', name='staticText4', parent=self,
              pos=wx.Point(16, 16), size=wx.Size(53, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT5,
              label='Estacion', name='staticText5', parent=self,
              pos=wx.Point(152, 112), size=wx.Size(40, 13), style=0)

        self.comboBox4 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX4,
              name='comboBox4', parent=self, pos=wx.Point(16, 128),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox4.SetLabel('')
        self.comboBox4.Bind(wx.EVT_COMBOBOX, self.OnCambiaTemporada,
              id=wxID_ABMPRODUCTOSCOMBOBOX4)
        self.comboBox4.Enable(False)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX1,
              name='comboBox1', parent=self, pos=wx.Point(152, 128),
              size=wx.Size(100, 21), style=0, value='')
        self.comboBox1.SetLabel('')
        self.comboBox1.Enable(False)

        self.staticText6 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT6,
              label='Anio', name='staticText6', parent=self, pos=wx.Point(256,
              112), size=wx.Size(21, 13), style=0)

        self.comboBox2 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX2,
              name='comboBox2', parent=self, pos=wx.Point(256, 128),
              size=wx.Size(66, 21), style=0, value='')
        self.comboBox2.SetLabel('')
        self.comboBox2.Enable(False)

        self.staticText7 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT7,
              label='Descripcion', name='staticText7', parent=self,
              pos=wx.Point(16, 72), size=wx.Size(54, 13), style=0)

        self.staticText8 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT8,
              label='Grupo', name='staticText8', parent=self, pos=wx.Point(328,
              112), size=wx.Size(29, 13), style=0)

        self.comboBox3 = wx.ComboBox(choices=[], id=wxID_ABMPRODUCTOSCOMBOBOX3,
              name='comboBox3', parent=self, pos=wx.Point(328, 128),
              size=wx.Size(180, 21), style=0, value='')
        self.comboBox3.SetLabel('')
        self.comboBox3.Enable(False)

        self.staticText9 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT9,
              label='Costo', name='staticText9', parent=self, pos=wx.Point(16,
              160), size=wx.Size(28, 13), style=0)

        self.textCtrl5 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL5,
              name='textCtrl5', parent=self, pos=wx.Point(16, 176),
              size=wx.Size(64, 21), style=wx.TE_RIGHT | wx.TE_LEFT,
              value='0.00')
        self.textCtrl5.Enable(False)

        self.button3 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON3, label='Guardar',
              name='button3', parent=self, pos=wx.Point(16, 232),
              size=wx.Size(75, 23), style=0)
        self.button3.Enable(False)
        self.button3.Bind(wx.EVT_BUTTON, self.OnGuardar,
              id=wxID_ABMPRODUCTOSBUTTON3)

        self.button5 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON5, label='Limpiar',
              name='button5', parent=self, pos=wx.Point(104, 232),
              size=wx.Size(75, 23), style=0)
        self.button5.Bind(wx.EVT_BUTTON, self.OnLimpiar,
              id=wxID_ABMPRODUCTOSBUTTON5)

        self.button4 = wx.Button(id=wxID_ABMPRODUCTOSBUTTON4, label='Salir',
              name='button4', parent=self, pos=wx.Point(432, 232),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnSalir,
              id=wxID_ABMPRODUCTOSBUTTON4)

        self.staticText2 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT2,
              label='Precio Venta', name='staticText2', parent=self,
              pos=wx.Point(328, 160), size=wx.Size(60, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT3,
              label='Precio 2', name='staticText3', parent=self,
              pos=wx.Point(400, 160), size=wx.Size(38, 13), style=0)

        self.textCtrl6 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL6,
              name='textCtrl6', parent=self, pos=wx.Point(328, 176),
              size=wx.Size(64, 21), style=wx.TE_RIGHT | wx.TE_LEFT,
              value='0.00')
        self.textCtrl6.Enable(False)
        self.textCtrl6.SetEditable(False)

        self.textCtrl7 = wx.TextCtrl(id=wxID_ABMPRODUCTOSTEXTCTRL7,
              name='textCtrl7', parent=self, pos=wx.Point(400, 176),
              size=wx.Size(64, 21), style=wx.TE_RIGHT | wx.TE_LEFT,
              value='0.00')
        self.textCtrl7.SetEditable(False)
        self.textCtrl7.Enable(False)

        self.staticText10 = wx.StaticText(id=wxID_ABMPRODUCTOSSTATICTEXT10,
              label='Temporada', name='staticText10', parent=self,
              pos=wx.Point(16, 112), size=wx.Size(54, 13), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.cargaAnioCombo()
        self.cargarEstacion()
        self.cargarGrupos()
        self.cargaTemporadaCombo()

    def habilita(self,habilita=True):
        self.textCtrl1.SetEditable(not habilita)
        self.button2.Enable(not habilita)
        self.textCtrl2.Enable(habilita)
        self.textCtrl3.Enable(habilita)
        self.button1.Enable(habilita)
        self.textCtrl4.Enable(habilita)
        self.comboBox1.Enable(habilita)
        self.comboBox2.Enable(habilita)
        self.comboBox3.Enable(habilita)
        self.comboBox4.Enable(habilita)
        self.textCtrl5.Enable(habilita)
        self.textCtrl6.Enable(habilita)
        self.textCtrl7.Enable(habilita)
        self.button3.Enable(habilita)

    def OnBuscarProveedor(self, event):
        if self.textCtrl2.GetValue() != "":
            consultaSQL = "SELECT idproveedor,nombre,parametro FROM proveedor WHERE idproveedor = '"+self.textCtrl2.GetValue()+"' "
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado != ():
                proveedor = resultado[0]
                self.textCtrl2.SetLabel(proveedor["idproveedor"])
                self.textCtrl3.SetLabel(proveedor["nombre"])
                self.textCtrl4.SetFocus()
                return
            self.textCtrl2.SetLabel("")
            self.textCtrl3.SetLabel("")
            self.textCtrl2.SetFocus()
            return
        if self.textCtrl3.GetValue() != "":
            consultaSQL = "SELECT idproveedor,nombre,parametro FROM proveedor WHERE nombre LIKE '%"+self.textCtrl3.GetValue()+"%' "
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado != () and len(resultado)==1:
                proveedor = resultado[0]
                self.textCtrl2.SetLabel(proveedor["idproveedor"])
                self.textCtrl3.SetLabel(proveedor["nombre"])
                self.textCtrl4.SetFocus()
                return
        import BuscaProveedor2
        ventana = BuscaProveedor2.Dialog1(self,self.textCtrl3.GetLabel())
        try:
            ventana.ShowModal()
            eleccion = ventana.getSeleccion()
        finally:
            ventana.Destroy()
        if eleccion.split(" / ") != ['']:
            self.textCtrl2.SetValue(eleccion.split(" / ")[1])
            self.textCtrl3.SetValue(eleccion.split(" / ")[0])
            self.textCtrl4.SetFocus()
        else:
            self.textCtrl4.SetFocus()

    def OnLimpiar(self, event):
        self.textCtrl1.SetLabel("")
        self.textCtrl2.SetLabel("")
        self.textCtrl3.SetLabel("")
        self.textCtrl4.SetLabel("")
        self.textCtrl5.SetLabel("0.00")
        self.textCtrl6.SetLabel("0.00")
        self.textCtrl7.SetLabel("0.00")
        self.comboBox1.SetSelection(-1)
        self.comboBox2.SetSelection(-1)
        self.comboBox3.SetSelection(-1)
        self.comboBox4.SetSelection(-1)
        self.habilita(False)
        self.textCtrl1.SetFocus()

    def cargarGrupos(self):
        list = []
        condicionSQL = "1 ORDER BY nombregrupo"
        resultados = consultasBD.executaSQL(self,"*","grupos",condicionSQL)
        for r in resultados:
            list.append(str(r[1])+" / "+str(r[0]))
        self.comboBox3.SetItems(list)
        return #list

    def cargaAnioCombo(self):
        anioActual = utiles.getfecha()[-4:]
        anioAnterior = str(int(anioActual)-1)
        anioSiguiente= str(int(anioActual)+1)
        self.comboBox2.Append(anioAnterior)
        self.comboBox2.Append(anioActual)
        self.comboBox2.Append(anioSiguiente)

    def cargaTemporadaCombo(self):
        anio = int(utiles.obtenerFecha("Y-m-d")[:4])
        mes = int(utiles.obtenerFecha("Y-m-d")[5:7])
        dia = int(utiles.obtenerFecha("Y-m-d")[-2:])
        anioanterior = anio -1
        anioactual = anio
        aniosiguiente = anio + 1
        self.comboBox4.Append("INVIERNO"+str(anioanterior))
        self.comboBox4.Append("VERANO"+str(anioanterior))
        self.comboBox4.Append("INVIERNO"+str(anioactual))
        self.comboBox4.Append("VERANO"+str(anioactual))
        self.comboBox4.Append("INVIERNO"+str(aniosiguiente))
        self.comboBox4.Append("VERANO"+str(aniosiguiente))
        self.comboBox4.SetEditable(False)

    def OnSalir(self, event):
        self.Close()

    def OnKillFocus(self, event):
        self.textCtrl4.SetLabel((self.textCtrl4.GetLabel()).upper())

    def OnBuscar(self, event):
        if self.textCtrl1.GetLabel()=="":
            utiles.mensaje(None,"Debe introducir un CodSussan")
            self.textCtrl1.SetFocus()
            return
        codsussan = self.textCtrl1.GetLabel()
        sql = "SELECT * FROM productos WHERE codsussan='"+codsussan+"' "
        resultado = consultasBD.ordenCrudaDict(sql)
        if len(resultado)!=1 or resultado==None or resultado==():
            utiles.mensaje(None,"Error: no se ha encontrado el CodSussan")
            return
        datos = resultado[0]
        idproveedor = datos["proveedor"]
        descripcion = datos["descri"]
        pventa = str(datos["preciolt1"])
        precio2 = str(datos["preciolt2"])
        estacion = datos["estacion"]
        anio = str(datos["anio"])
        grupo = str(datos["grupo"])
        preciocompra = str(datos["preciocompra"])
        temporada = str(datos["temporada"])
        print temporada
        self.textCtrl2.SetLabel(idproveedor)
        self.OnBuscarProveedor(None)
        self.textCtrl4.SetLabel(descripcion)
        for i,item in enumerate(self.comboBox1.GetItems()):
            if item==estacion: 
                self.comboBox1.SetSelection(i)
                break
        for i,item in enumerate(self.comboBox2.GetItems()):
            if item==anio: 
                self.comboBox2.SetSelection(i)
                break
        for i,item in enumerate(self.comboBox3.GetItems()):
            aux1,aux2 = item.split(" / ")
            aux1 = int(grupo)
            aux2 = int(aux2)
            if aux1==aux2: 
                self.comboBox3.SetSelection(i)
                break
        for i,item in enumerate(self.comboBox4.GetItems()):
            if item==temporada: 
                self.comboBox4.SetSelection(i)
                break
        self.textCtrl5.SetLabel(preciocompra)
        self.textCtrl6.SetLabel(pventa)
        self.textCtrl7.SetLabel(precio2)
        self.original = datos
        self.habilita()
        self.textCtrl2.SetFocus()

    def verificarGuardar(self):
        if self.textCtrl2.GetLabel()=="":
            utiles.mensaje(None,"Introduzca un Codigo de Proveedor")
            self.textCtrl2.SetFocus()
            return False
        if self.textCtrl4.GetLabel()=="":
            utiles.mensaje(None,"Introduzca una Descripcion")
            self.textCtrl4.SetFocus()
            return False
        if self.comboBox1.GetSelection()<0:
            utiles.mensaje(None,"Debe especificar Estacion")
            self.comboBox1.SetFocus()
            return False
        if self.comboBox2.GetSelection()<0:
            utiles.mensaje(None,"Debe especificar Anio")
            self.comboBox2.SetFocus()
            return False
        if self.comboBox3.GetSelection()<0:
            utiles.mensaje(None,"Debe especificar Grupo")
            self.comboBox3.SetFocus()
            return False
        try:
            costo = Decimal(self.textCtrl5.GetLabel()).quantize(Decimal("0.00"))
        except:
            utiles.mensaje(None,"Debe especificar un Costo\n(un valor numerico)")
            self.textCtrl5.SetFocus()
            return False
        if costo<=Decimal("0.00"):
            utiles.mensaje(None,"Debe especificar un Costo mayor a 0")
            self.textCtrl5.SetFocus()
            return False
        return True

    def OnGuardar(self, event):
        if not self.verificarGuardar():
            return
        
        consultasBD.begin()        

        fecha = utiles.obtenerFecha("Y-m-d h:m:s")
        codsussan = self.original["codsussan"]
        proveedor = self.original["proveedor"]
        descri = self.original["descri"]
        estacion = self.original["estacion"]
        anio = self.original["anio"]
        grupo = self.original["grupo"]
        preciocompra = self.original["preciocompra"]
        temporada = self.original["temporada"]
        
        r1 = "INSERT INTO productos_m ("
        r2 = "fecha,codsussan,proveedor,descri, "
        r3 = "estacion,anio,grupo,preciocompra,temporada) "
        r4 = "VALUES ("
        r5 = "'%s','%s','%s','%s'," % (fecha,codsussan,proveedor,descri)
        r6 = "'%s','%s','%s','%s','%s')" % (estacion,anio,grupo,preciocompra,temporada)
        sql = r1+r2+r3+r4+r5+r6
        consultasBD.executaSinCommit(None, sql)

        codsussan = self.textCtrl1.GetLabel()
        proveedor = self.textCtrl2.GetLabel()
        descri = self.textCtrl4.GetLabel()
        estacion = self.comboBox1.GetLabel()
        anio = self.comboBox2.GetLabel()
        grupo = ((self.comboBox3.GetLabel()).split(" / "))[1]
        preciocompra = self.textCtrl5.GetLabel()
        temporada = self.comboBox4.GetLabel()
        
        r1 = "INSERT INTO productos_m ("
        r2 = "fecha,codsussan,proveedor,descri, "
        r3 = "estacion,anio,grupo,preciocompra,temporada) "
        r4 = "VALUES ("
        r5 = "'%s','%s','%s','%s'," % (fecha,codsussan,proveedor,descri)
        r6 = "'%s','%s','%s','%s','%s')" % (estacion,anio,grupo,preciocompra,temporada)
        sql = r1+r2+r3+r4+r5+r6
        consultasBD.executaSinCommit(None, sql)
        
        r1 = "UPDATE productos SET proveedor='%s',descri='%s'," % (proveedor,descri)
        r2 = "estacion='%s',anio='%s',grupo='%s'," % (estacion,anio,grupo)
        r3 = "preciocompra='%s',temporada='%s' WHERE codsussan='%s' " % (preciocompra,temporada,codsussan)
        sql = r1+r2+r3
        sincronizar_tabla.addChange(sql=sql)
        consultasBD.executaSinCommit(None, sql)

        consultasBD.commit()
        sincronizar_tabla.syncServerTables(self, ["productos"])

        utiles.mensaje(None,"Producto modificado y sincronizado")
        self.OnLimpiar(None)

    def cargarEstacion(self):
        self.comboBox1.Append("Primavera") #0
        self.comboBox1.Append("Verano") #1
        self.comboBox1.Append("Otono") #2
        self.comboBox1.Append("Invierno") #3

    def OnCambiaTemporada(self, event):
        temporada = self.comboBox4.GetLabel()
        if temporada[:5]=="INVIE": posicion = 3
        elif temporada[:5]=="VERAN": posicion = 1
        else: posicion = -1
        self.comboBox1.SetSelection(posicion)
        anio = temporada[-4:]
        for indice,x in enumerate(self.comboBox2.GetItems()):
            if x == anio: break
        self.comboBox2.SetSelection(indice)
